﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;

namespace DAL
{
    public class ListKetQua
    {
        public long size;
        public KetQua head;
        public KetQua tail;
        public ListKetQua()
        {
            size = 0;
            head = null;
            tail = null;
        }
        public void addKetQua(long giaTri)
        {
            KetQua ketQuaMoi = new KetQua(giaTri); ;
            if (head == null)
            {


                head = ketQuaMoi;
                tail = ketQuaMoi;
            }
            else
            {
                KetQua temp = head;
                int flag = 0;
                while (temp != tail.pNext)
                {
                    if (temp.giaTri > giaTri)
                    {
                        if (temp.pPrev != null)
                        {
                            if (temp.pPrev.giaTri == giaTri)
                            {
                                temp.pPrev.soLuong++;
                                flag = 1;
                                break;
                            }
                            else
                            {
                                ketQuaMoi.pNext = temp;
                                ketQuaMoi.pPrev = temp.pPrev;
                                temp.pPrev.pNext = ketQuaMoi;
                                temp.pPrev = ketQuaMoi;
                                flag = 1;
                                break;
                            }
                        }
                        else
                        {
                            ketQuaMoi.pPrev = temp.pPrev;
                            ketQuaMoi.pNext = temp;
                            temp.pPrev = ketQuaMoi;
                            head = ketQuaMoi;
                            flag = 1;
                            break;
                        }

                    }
                    else
                    {
                        if (temp.giaTri == giaTri)
                        {
                            temp.soLuong++;
                            flag = 1;
                            break;
                        }
                    }
                    temp = temp.pNext;
                }
                if (flag == 0)
                {
                    ketQuaMoi = new KetQua(giaTri);
                    tail.pNext = ketQuaMoi;
                    ketQuaMoi.pPrev = tail;
                    tail = ketQuaMoi;
                }

            }

            size++;
        }
        public bool delListKetQua()
        {
            if (head != null)
            {

                head = head.pNext;
                return true;
            }
            return false;
        }
        // tim mã xuat hien nhieu nhat - cái này hên xui 
        public long soLuongLonNhat()
        {
            long max = this.head.soLuong;
            KetQua temp = this.head;
            while (temp != null)
            {
                if (temp.soLuong > max)
                {
                    max = temp.soLuong;
                }
                temp = temp.pNext;
            }
            return max;
        }
        public long []MaCoSoLuongMax()
        {
            long []ketQua =new long[this.size];
            long max = soLuongLonNhat();
            KetQua temp = this.head;
            int kq = 0;
            while (temp != null)
            {
                if (temp.soLuong == max)
                {
                    ketQua[kq] = temp.giaTri;
                }
                temp = temp.pNext;
                kq++;
            }
            return ketQua;

        }
    }
}
